package com.woniuxy.portal.controller;

import com.woniuxy.portal.entity.Role;
import com.woniuxy.portal.service.IRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 作者
 * @since 2023-09-15
 */
@RestController
@RequestMapping("/role")
public class RoleController {

    @Autowired
    private IRoleService roleService;

    /**
     * @Cacheable(cacheNames = "books")
     * 1、自动根据缓存名称作为key，去redis中获取数据；
     * 2、如果没有获取到，则查询数据库，并且把查询的结果放入缓存
     */
    @GetMapping
    @Cacheable(cacheNames = "books")
    public List<Role> findAll(){
        return roleService.list();
    }

    @GetMapping("/findById")
    @Cacheable(cacheNames = "books",key = "#id")
    public Role findById(Long id){
        return roleService.getById(id);
    }

    /**
     * 修改、添加时候清空缓存
     * @CacheEvict
     * 1、cacheNames 缓存名称
     * 2、allEntries 执行当前方法时候删除cacheNames缓存名称下的所有的key
     */
    @PostMapping
    @CacheEvict(cacheNames = "books",allEntries = true)
    public void saveOrUpdate(@RequestBody Role role){
        roleService.saveOrUpdate(role);
    }

    /**
     * @CacheEvict：
     * 1、用于清除缓存中的数据。可以设置清除的条件、清除的 key 值等。
     * 2、#p0 对应方法形参的第一个参数
     */
    @DeleteMapping
    @CacheEvict(cacheNames = "books",key = "#p0")
    public void deleteById(Long id) {
        roleService.removeById(id);
    }
}
